var QQMapWX = require('qqmap-wx-jssdk.js');
var qqmapsdk;
const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}
//验证手机号
function checkMobile(mobile) {
  var regMobile = /^[1][3,4,5,6,7,8][0-9]{9}$/
  if (!regMobile.test(mobile)) {
    return false;
  }
  return true;
}
//验证身份证号
function checkIdNo(idNo) {
  var regIdNo = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  if (!regIdNo.test(idNo)) {
    return false;
  }
  return true;
}
//纯数字
function checkInt(value) {
  var regNum = new RegExp('[0-9]', 'g');
  if (!regNum.test(value)) {
    return false;
  }
  return true;
}
//小数， 可以有 .
function checkFloat(value) {

}


function checkCardId(socialNo) {
  console.info("socialNo=" + socialNo)
  if (socialNo == "" || socialNo == null || socialNo==undefined) {
    //fy_alert("输入身份证号码不能为空!", $("#" + txtId));
    return (false);
  }

  if (socialNo.length != 15 && socialNo.length != 18) {
    //fy_alert("输入身份证号码格式不正确!", $("#" + txtId));
    return (false);
  }

  var area = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" };

  if (area[parseInt(socialNo.substr(0, 2))] == null) {
    //fy_alert("身份证号码不正确(地区非法)!", $("#" + txtId));
    return (false);
  }

  if (socialNo.length == 15) {
    pattern = /^\d{15}$/;
    if (pattern.exec(socialNo) == null) {
      //fy_alert("15位身份证号码必须为数字！", $("#" + txtId));
      return (false);
    }
    var birth = parseInt("19" + socialNo.substr(6, 2));
    var month = socialNo.substr(8, 2);
    var day = parseInt(socialNo.substr(10, 2));
    switch (month) {
      case '01':
      case '03':
      case '05':
      case '07':
      case '08':
      case '10':
      case '12':
        if (day > 31) {
          //fy_alert('输入身份证号码不格式正确!', $("#" + txtId));
          return false;
        }
        break;
      case '04':
      case '06':
      case '09':
      case '11':
        if (day > 30) {
          //fy_alert('输入身份证号码不格式正确!', $("#" + txtId));
          return false;
        }
        break;
      case '02':
        if ((birth % 4 == 0 && birth % 100 != 0) || birth % 400 == 0) {
          if (day > 29) {
            //fy_alert('输入身份证号码不格式正确!', $("#" + txtId));
            return false;
          }
        } else {
          if (day > 28) {
            //fy_alert('输入身份证号码不格式正确!', $("#" + txtId));
            return false;
          }
        }
        break;
      default:
        //fy_alert('输入身份证号码不格式正确!', $("#" + txtId));
        return false;
    }
    var nowYear = new Date().getYear();
    if (nowYear - parseInt(birth) < 15 || nowYear - parseInt(birth) > 100) {
      //fy_alert('输入身份证号码不格式正确!', $("#" + txtId));
      return false;
    }
    return (true);
  }

  var Wi = new Array(
    7, 9, 10, 5, 8, 4, 2, 1, 6,
    3, 7, 9, 10, 5, 8, 4, 2, 1
  );
  var lSum = 0;
  var nNum = 0;
  var nCheckSum = 0;

  for (var i = 0; i < 17; ++i) {


    if (socialNo.charAt(i) < '0' || socialNo.charAt(i) > '9') {
      //fy_alert("输入身份证号码格式不正确!", $("#" + txtId));
      return (false);
    }
    else {
      nNum = socialNo.charAt(i) - '0';
    }
    lSum += nNum * Wi[i];
  }


  if (socialNo.charAt(17) == 'X' || socialNo.charAt(17) == 'x') {
    lSum += 10 * Wi[17];
  }
  else if (socialNo.charAt(17) < '0' || socialNo.charAt(17) > '9') {
    //fy_alert("输入身份证号码格式不正确!", $("#" + txtId));
    return (false);
  }
  else {
    lSum += (socialNo.charAt(17) - '0') * Wi[17];
  }

  if ((lSum % 11) == 1) {
    return true;
  }
  else {
    //fy_alert("输入身份证号码格式不正确!", $("#" + txtId));
    return (false);
  }

}


//获取两地间的距离
// function getDistance(lat, lng) {
//   // 实例化API核心类
//   qqmapsdk = new QQMapWX({
//     key: 'RPTBZ-NX6LJ-ETVF5-KRBHK-GAFM6-SIFKA'
//   });
//   qqmapsdk.calculateDistance({
//     to: [{
//       latitude: lat,
//       longitude: lng
//     }],
//     success: function (res) {
//       const distance = Math.floor(res.result.elements[0].distance / 1000 * 100) / 100
//       console.info("距离");
//       return distance;
//     },
//     fail: function (res) {
//       console.log(res);
//     },
//     complete: function (res) {
//       console.log(res);
//     }
//   });

// }
function getDistance(lat, lng) {
  qqmapsdk = new QQMapWX({
    key: 'RPTBZ-NX6LJ-ETVF5-KRBHK-GAFM6-SIFKA'
  });
  return new Promise((resolve) => {
    qqmapsdk.calculateDistance({
      to: [{
        latitude: lat,
        longitude: lng
      }],
      success(res) {
        const distance = Math.floor(res.result.elements[0].distance /
          1000 * 100) /
          100
        resolve(distance)
      },
      fail() {
        resolve('')
      }
    })
  })
}

//身份证号、数字、小数 可以通过input 的type 字段控制，没必要做验证
module.exports = {
  formatTime: formatTime,
  checkMobile: checkMobile,
  checkIdNo: checkIdNo,
  checkInt: checkInt,
  getDistance: getDistance,
  checkCardId: checkCardId
}
